<?php
class ParticulierController extends Controller{
	const APPEL_OFFRE_RESTAURANT = "Restaurant";
	const APPEL_OFFRE_HOTEL = "Hotel";
	protected $type_appel_offre;
	
	public function index(){
		if(empty($this->request->params)){
			
			if(isset($_SESSION['email'])){
			$model = $this->loadModel('utilisateurManager');
			$donnee = $model->getInfoParticulier($_SESSION['email'],$_SESSION['password']);
			$this->set('user',$donnee[0]);
			$this->set('particulier',$donnee[1]);
			$this->set('adresse',$donnee[2]);
			} else {
			$this->redirect(SITE."#popup_connexion");	
			}
		} else {
			$this->renderErreur404();
		}
	}
	public function modifierProfil(){
		if(isset($_SESSION['email']) and empty($this->request->params)){
		    $model = $this->loadModel('utilisateurManager');
		    $donnee = $model->getInfoParticulier($_SESSION['email'],$_SESSION['password']);
		    $this->set('user',$donnee[0]);
		    $this->set('particulier',$donnee[1]);
		    $this->set('adresse',$donnee[2]);
		    return $donnee;
		} else {
			$this->renderErreur404();
		}
		
		
	}
	
	public function miseAjourInfos(){
		if(isset($_POST['modifierinfos'])){
			$ville = $_POST['ville'];
			//$pays = $_POST['pays'];
			$code = isset($_POST['code_postal']) ? $_POST['code_postal'] : "";
			$adresse = isset($_POST['adresse']) ? $_POST['adresse'] : ""; 
			$n_email = isset($_POST['email']) ? $_POST['email'] : "";
			$telephone =isset($_POST['telephone']) ? $_POST['telephone'] : "";
			$fonction = isset($_POST['fonction']) ? $_POST['fonction'] : "";
			$new_password_conf = isset($_POST['conf_password']) ?$_POST['conf_password'] : "" ;
			$new_password = isset($_POST['password']) ? $_POST['password'] : "";
			$old_password = isset($_POST['old_password']) ? sha1($_POST['old_password']) : "";
			
			$model = $this->loadModel('utilisateurManager');
			$id = $_SESSION['id_utilisateur'];
			
			
			
			if($old_password!=$_SESSION['password']){
				$errors='Veuillez saisir votre ancien mot de passe pour apporter des modifications.';
			}
			else if (! $this->verifTel($telephone)){
				$errors='Le numéro de téléphone est incorrect.';
			} else if(! $this->verifEmail($n_email)){
				$errors="Adresse email invalide.";
			} else if( strlen($code)!=5 or ! is_numeric($code) ){
				$errors='Code postal invalide.';
			} else if(!$model->telValide($telephone,$_SESSION['id_utilisateur'])){
				$errors="Cet numéro de téléphone appartient à un autre utilisateur.";
			} else if(!$model->mailValide($n_email,$_SESSION['id_utilisateur'])){
				$errors='Cette adresse email appartient à un autre utilisateur.';	
			} else if(strlen($ville)<2 or is_numeric($ville)){
				$errors='Ville invalide.';	
			} else if(strlen($adresse)<2 or is_numeric($adresse)){
				$errors='Addresse invalide.';
			} else if(strlen($fonction)<2 or is_numeric($fonction)){
				$errors='Fonction invalide.';	
			} else if((strlen($new_password)<6 and strlen($new_password)!=0) or $new_password!=$new_password_conf){
				$errors='Les deux mots de passe doivent être identique et d\'au moins 6 caractères';	
			}
			else {
				//si on doit pas changer le mot de passe on recupere l'ancienne
				if($new_password==""){
					$n_pass = $_SESSION['password'];
				} else {
					$n_pass = sha1($new_password);
				}
				$model->updateAdresse($ville/*$pays*/,$code,$adresse,$id);
				$model->updateEmailPassword($n_email,$n_pass,$id);
				$model->updateTelFonc($telephone,$fonction,$id);
				return null;
			}
			
			return $errors;	
		} else if($this->request->action==__FUNCTION__){
			$this->renderErreur404();	
		}
	}
	public function appelOffre(){
		
		if(count($this->request->params)==1){
			if($this->request->params[0]!="restaurant" and $this->request->params[0]!="hotel"){
				$this->renderErreur404();
			}
			$this->set('title',NOM_SITE.' - Appel d\'offre restaurant');
		} else if(empty($this->request->params)){
			$this->set('title',NOM_SITE.' - Appel d\'offre restaurant');
		} else {
			$this->renderErreur404();	
		}
	}
	public function gestionDevis(){
		$this->set('title','Gestions de dévis de professionnels');
		
	}
	public function addAppelOffre(){
		$model = $this->loadModel('appelOffreManager');
		
	if($this->request->action!=__FUNCTION__){
		 $tab = array();
		if(isset($_POST['appelOffre']) && $this->type_appel_offre==ParticulierController::APPEL_OFFRE_RESTAURANT){
			if(isset($_POST['titre'])&&($_POST['titre']!="Choisir un évènement")){
				$titre = $_POST['titre'];
			} else {
				$titre = isset($_POST['titre2']) ? $_POST['titre2'] : "";	
			}

			$nbre_personne = isset($_POST['nombrePersonne']) ? $_POST['nombrePersonne'] : 0 ;
			$budget = isset($_POST['budget']) ? $_POST['budget'] : 0;
			$details = isset($_POST['besoins']) ? $_POST['besoins'] : "";
			$date_resto = $this->dateDataBase(isset($_POST['date']) ? $_POST['date'] : "");
			$date_limite = $this->dateDataBase(isset($_POST['date2']) ? $_POST['date2'] : "");
			$cuisine = isset($_POST['cuisine']) ? $_POST['cuisine'] : "";
			
			$now = new DateTime("now");
			$date_debut = new DateTime($date_resto);
			$date_fin = new DateTime($date_limite);
			
			if($titre==""){
				$tab = array('infos_errors'=>'Veuillez choisir ou donnée un titre à votre évènement.');
			} else if($nbre_personne<=0 or !is_numeric($nbre_personne)){
				$tab = array('infos_errors'=>'Le nombre de personne doit être supérieur à 0.');
			} else if($budget<=0){
				$tab = array('infos_errors'=>'Votre budget doit être supérieur à 0.');
			} else if($date_debut <= $now){
				$tab = array('infos_errors'=>'La date choisie est incorrecte, veuillez choisir une nouvelle date.');
			} else if($date_fin<=$date_debut){
				$tab = array('infos_errors'=>'Il faut au moins 24 heures entre la date de publication et la date limite de réception de dévis.');
			} else if(strlen($cuisine)==0 or is_numeric($cuisine)){
				$tab = array('infos_errors'=>'Le nom de la cuisine est non valide.');
			} else if ($model->appelOffreRestoExist($_SESSION['id_utilisateur'],$titre,$nbre_personne,
			$budget,$cuisine,$details,$date_resto,$date_limite)){
				$tab = array('infos_errors'=>'Vous avez déjà publiez un appel d\'offre avec les mêmes informations.');
			}
			else if ($model->addAppelOffreResto($titre,$nbre_personne,$budget,$cuisine,$details,$date_resto,
			$date_limite)){
				$tab = array('infos_success'=>
				'Appel d\'offre effectué avec succès votre demande sera publiez aux professionnels dans les prochaines minutes !');
				return $tab;
				
			} else {
				$tab = array('infos_errors'=>
				'Des erreurs sont survénuent lors de la publication de votre appel d\'offre. Merci de bien vouloir récommencer !');
				return $tab;
				
			}
			
			return $tab;
		
		} else if(isset($_POST['appelOffre']) && $this->type_appel_offre==ParticulierController::APPEL_OFFRE_HOTEL){
		
			if(isset($_POST['titre'])&&($_POST['titre']!="Choisir un évènement")){
				$titre = $_POST['titre'];
			} else {
				$titre = isset($_POST['titre2']) ? $_POST['titre2'] : "";	
			}
			$nbre_personne = isset($_POST['nombrePersonne']) ? $_POST['nombrePersonne'] : 0;
			$nbre_chambre = isset($_POST['nombreChambre']) ? $_POST['nombreChambre']: 0 ;
			$nbre_nuit = isset($_POST['nombreNuit']) ? $_POST['nombreNuit'] : 0;
			$besoins = isset($_POST['besoins']) ? $_POST['besoins'] : "" ;
			$chambre_enfant = isset($_POST['nombreLitEnfant']) ? $_POST['nombreLitEnfant'] : 0;
			$date_sejour = $this->dateDataBase(isset($_POST['date']) ? $_POST['date'] : "");
			$date_limite = $this->dateDataBase(isset($_POST['date2']) ? $_POST['date2'] : "");
			$budget = isset($_POST['budget']) ? $_POST['budget'] : "" ;
			
			$now = new DateTime("now");
			$date_debut = new DateTime($date_sejour);
			$date_fin = new DateTime($date_limite);
			
			if($titre==""){
				$tab = array('infos_errors'=>'Veuillez choisir ou donnée un titre à votre évènement.');
			} else if($nbre_personne<=0){
				$tab = array('infos_errors'=>'Le nombre de personne doit être supérieur à 0.');
			} else if($nbre_chambre<=0){
				$tab = array('infos_errors'=>'Le nombre de chambre doit être supérieur à 0.');
			} else if($nbre_nuit<=0){
				$tab = array('infos_errors'=>'Le nombre de nuit doit être supérieur à 0.');
			} else if($budget<=0){
				$tab = array('infos_errors'=>'Votre budget doit être supérieur à 0.');
			} else if($date_debut <= $now){
				$tab = array('infos_errors'=>'La date choisie est incorrecte, veuillez choisir une nouvelle date.');
			} else if($date_fin<=$date_debut){
				$tab = array('infos_errors'=>'Il faut au moins 24 heures entre la date de publication et la date limite de réception de dévis.');
			} else if($model->appelOffreHotelExist($_SESSION['id_utilisateur'],$titre,$nbre_personne,$nbre_chambre
			,$chambre_enfant,$nbre_nuit,$budget,$date_sejour,$besoins,$date_limite)){
				$tab = array('infos_errors'=>'Vous avez déjà publiez un appel d\'offre avec les mêmes informations.');	
			}
			else if($model->addAppelOffreHotel($titre,$nbre_personne,$nbre_chambre,$chambre_enfant,$nbre_nuit,$budget,
			$date_sejour,$besoins,$date_limite)){
				$tab = array('infos_success'=>
				'Appel d\'offre effectué avec succès. Votre demande sera publiez aux professionnels dans les prochaines minutes !');
				return $tab;
			} else {
				$tab = array('infos_errors'=>
				'Des erreurs sont survénuent lors de la publication de votre appel d\'offre. Merci de bien vouloir recommencer !');
				return $tab;
			}
			return $tab;
		}
	} else {
		//la fonction ne doit pas être appeler comme action 
		$this->renderErreur404();	
	}
	}
	public function gestionAppelOffre(){
		$this->set('title',NOM_SITE." - Gestion des appels d\'offres");	
	}
	
	public function getListe($type_appel_offre){
			if(isset($_SESSION['type_utilisateur']) && $this->request->action!=__FUNCTION__){
				$model = $this->loadModel('appelOffreManager');
				$id_utilisateur = $_SESSION['id_utilisateur'];
				return $model->getListeAppelOffre($this->request,$type_appel_offre,$id_utilisateur);
			} else if($this->request->action==__FUNCTION__){
				//la fonction ne doit pas être appeler comme action 
				$this->renderErreur404();	
			}
			
	}
	public function getDevis($id_appel_offre,$type_appel_offre){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			$id_utilisateur = $_SESSION['id_utilisateur'];
			return $model->getListeDevis($this->request,$id_appel_offre,$type_appel_offre);		
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
		
	}
	public function getNombreDevis($type_appel_offre,$id_appel_offre){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			$id_appel_offre = htmlentities($id_appel_offre);
			return $model->getNombreDevis($type_appel_offre,$id_appel_offre);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();
		}
		
	}
	public function getInfosAppelOffre($type_appel_offre,$id_appel_offre){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			return $model->getDetailsAppelOffre($id_appel_offre,$type_appel_offre);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();
		}
		
	}
	public function updateAppelOffre(){
		
	if($this->request->action!=__FUNCTION__){	
		$erreurs = array();
		$model = $this->loadModel('appelOffreManager');
		$donnee['titre_appel_offre'] = isset($_POST['titre_appel_offre']) ? $_POST['titre_appel_offre'] : "" ;
		$donnee['nombre_personne'] = isset($_POST['nombre_personne']) ? $_POST['nombre_personne'] : 0;
		$donnee['date'] = $this->dateDataBase(isset($_POST['date']) ? $_POST['date'] : "");
		$donnee['date_limite'] = $this->dateDataBase(isset($_POST['date2']) ? $_POST['date2'] : "");
		$donnee['budget'] = isset($_POST['budget']) ? $_POST['budget'] : 0 ;
		$donnee['details'] = isset($_POST['details']) ? $_POST['details'] : "";
		$type_appel_offre = isset($_POST['type_appel_offre']) ? $_POST['type_appel_offre'] : "" ;
		$donnee['id_appel_offre'] = isset($_POST['id_appel_offre']) ? $_POST['id_appel_offre'] : 0;
		$password = sha1(isset($_POST['password']) ? $_POST['password'] : "");
		$date_resto = $this->dateDataBase(isset($_POST['date']) ? $_POST['date'] : ""); 
		$date_limite = $this->dateDataBase(isset($_POST['date2']) ? $_POST['date2'] : "");
		$id_appel_offre = isset($_POST['id_appel_offre']) ? $_POST['id_appel_offre'] : 0;
		
		$now = new DateTime("now");
		$date_debut = new DateTime($date_resto);
		$date_fin = new DateTime($date_limite);
		
		if(($type_appel_offre!="appel_offre_restaurant" and $type_appel_offre!="appel_offre_hotel")
		or strlen($donnee['titre_appel_offre'])<2 or ! is_numeric($donnee['nombre_personne'])
		or $donnee['nombre_personne']<=0 or ! is_numeric($donnee['budget']) or $donnee['budget']<=0
		or $date_debut<=$now or $date_fin<=$date_debut
		or $password!=$_SESSION['password']){
			$erreurs['password'] = true;
			return $erreurs;	
		} else if($model->getDetailsAppelOffre($id_appel_offre,$type_appel_offre)==null){
			$erreurs['password'] = true;
			return $erreurs;
		}
		
		else {
			
			if($type_appel_offre=="appel_offre_restaurant"){
				$donnee['cuisine'] = isset($_POST['cuisine']) ? $_POST['cuisine'] : "";
				if($donnee['cuisine']!="" && !is_numeric($donnee['cuisine'])){
					$model->updateAppelOffre($type_appel_offre,$donnee);
				} else {
					$erreurs['password'] = true;
					return $erreurs;	
				}
				
			} else {
				
				$donnee['nombre_chambre'] = isset($_POST['nombre_chambre']) ? $_POST['nombre_chambre'] : 0;
				$donnee['nombre_enfant'] = isset($_POST['nombre_enfant']) ? $_POST['nombre_enfant'] : "";
				$donnee['nombre_nuit'] = isset($_POST['nombre_nuit']) ? $_POST['nombre_nuit'] : 0 ;
				
				if(!is_numeric($donnee['nombre_chambre']) or $donnee['nombre_chambre']<=0 or 
					!is_numeric($donnee['nombre_nuit']) or $donnee['nombre_nuit']<=0 ){
						$erreurs['password'] = true;
						return $erreurs;
					}
					
					$model->updateAppelOffre($type_appel_offre,$donnee);
					return $erreurs;
			}
		return $erreurs;
		
		} 
	} else {
		//la fonction ne doit pas être appeler comme action 
		$this->renderErreur404();	
	}
	
	}
	public function isValide($id_appel_offre,$id_professionnel,$id_devis){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			return $model->isValide($id_appel_offre,$id_professionnel,$id_devis);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
		
	}
	
	public function getInfosPro($type_pro,$id){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			if($type_pro=="hotel"){
				return $model->getInfosHotel($id);
			}
			return $model->getInfosResto($id);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
	}
	
	public function getDevisId($id_devis){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			return $model->getDevisId($id_devis);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();
		}
			
	}
	public function getAdresse($id){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');	
			return $model->getAdresse($id);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();
		}
		
	}
	public function getTypeProfessionnel($id){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('utilisateurManager');
			return $model->getTypeProfessionnel($id);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
		
	}
	public function getAllListe($type_appel_offre){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('appelOffreManager');
			return $model->getAllListe($type_appel_offre,$_SESSION['id_utilisateur']);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
			
	}
	public function getHoraireResto($id_resto){
		if($this->request->action!=__FUNCTION__){
			$model = $this->loadModel('utilisateurManager');
			return $model->getHoraireResto($id_resto);
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
		
	}
	public function isHoraireVide($horaire){
		if($this->request->action!=__FUNCTION__){
			if($horaire->lundi=='/' && $horaire->mardi=='/' && $horaire->mercredi=='/' && $horaire->jeudi=='/'
			&& $horaire->vendredi=='/' && $horaire->samedi == "/" && $horaire->dimanche == '/')
			return true;
		return false;
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	

		}
		
	}
	
	public function validerDevis(){
		if($this->request->action!=__FUNCTION__){
		$model = $this->loadModel('appelOffreManager');
		$erreurs = array();
		if(count($this->request->params)==4){
			$id_appel_offre = intval($this->request->params[1]);
			$id_devis = intval($this->request->params[2]);
			$id_professionnel = intval($this->request->params[3]);
			$type_appel_offre = htmlentities($this->request->params[0])=="restauration" ? "appel_offre_restaurant" : 
			"appel_offre_hotel";
			if($this->isValide($id_appel_offre,$id_professionnel,$id_devis)){
				if($model->isValidate($type_appel_offre,$id_appel_offre)==false){
					$model->validerAppelOffre($type_appel_offre,$id_appel_offre);
					$model->validerDevis($id_devis,$id_appel_offre);
					$contenu = "Devis valider par le client";
					$model->sendMessage(0,$id_professionnel,$contenu);	
				} else {
					$erreurs['deja_valider'] = true;	
				}
			} else {
				$erreurs['erreurs_infos'] = true;
			}
		} else {
			$erreurs['erreurs_validation'] = true;
		}
		return $erreurs;
		} else {
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();
		}
	}
	
	public function sendMessages(){
		
		if(isset($_POST['envoyerMessages']) && $this->request->action!=__FUNCTION__){
			$model = $this->loadModel('messagesManager');
			$model_devis = $this->loadModel('appelOffreManager');
			$id_devis_appel_offre = $_POST['id_devis'];
			$id_expediteur = $_SESSION['id_utilisateur'];
			$donnee = $model_devis->getDevisId($id_devis_appel_offre);
			$id_destinateur = $donnee->id_professionnel;
			$sujet = htmlentities($_POST['sujet']);
			$messages = htmlentities($_POST['messages']);
			return $model->sendMessages($id_expediteur,$id_destinateur,$sujet,$messages);	
		} else if($this->request->action==__FUNCTION__){
			//la fonction ne doit pas être appeler comme action 
			$this->renderErreur404();	
		}
	}
}